
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Insifo.BE.Gen;
using Insifo.DL.Gen;
using Insifo.DL;

namespace  Insifo.BL.Gen
{
        

    public class BLBaseOperativa
    {
      
            DLBaseOperativa _dl = new DLBaseOperativa();
            DLTransactionMng _transaccion = null;

            /// <summary>
            /// Método obtiene la lista
            /// </summary>
            /// <returns>Devuelve un DataSet</returns>
            public DataSet Listar(BEBaseOperativa  pbe)
            {
                return _dl.Listar(pbe);
            }
            
            /// <summary>
            /// Método que obtiene un objeto
            /// </summary>
            /// <returns>Devuelve un Objeto</returns>
            public BEBaseOperativa Obtener(BEBaseOperativa pbe)
            {
                //Obtiene el detalle de salida
                return _dl.Obtener(pbe);
            }

            /// <summary>
            /// Método que inserta un objeto / Inserta en Spring si esta habilitado 
            /// </summary>
            /// <returns>Devuelve un Objeto</returns>
            public BEBaseOperativa Insertar(BEBaseOperativa pbe)
            {
                _transaccion = DLTransactionMng.Begin();
                _dl.Transaction = _transaccion;
                var be = _dl.Insertar(pbe);

                try
                {
                   if (be.TransaccionSpring == "S")
                    {
                       _dl.InsertarSpring(pbe);
                    }  
                 
                    //Terminar la transaccion
                    _transaccion.Commit();
                 }
                 catch (Exception e)
                {
               
                     //Cancela la transaccion
                    _transaccion.RollBack();
                    throw e;
                }
                finally
                {
                 _transaccion.Dispose();
                }
                return be;
            }

            /// <summary>
            /// Método que actualiza un objeto / Actuzaliza en Spring si esta habilitado.
            /// </summary>
            /// <returns>Devuelve un Objeto</returns>
            public BEBaseOperativa Actualizar(BEBaseOperativa pbe)
            {
                _transaccion = DLTransactionMng.Begin();
                _dl.Transaction = _transaccion;
                var be = _dl.Actualizar(pbe);

                try
                {
                    if (be.TransaccionSpring == "S")
                    {
                        _dl.ActualizarSpring(pbe);
                    }

                    //Terminar la transaccion
                    _transaccion.Commit();
                }
                catch (Exception e)
                {

                    //Cancela la transaccion
                    _transaccion.RollBack();
                    throw e;
                }
                finally
                {
                    _transaccion.Dispose();
                }
                return be;
            }
            /// <summary>
            /// Método que elimina logicamente un objeto
            /// </summary>
            /// <returns>Devuelve un Objeto</returns>
            public BEBaseOperativa Eliminar(BEBaseOperativa pbe)
            {
                _transaccion = DLTransactionMng.Begin();
                _dl.Transaction = _transaccion;
                var be = _dl.Eliminar(pbe);

                try
                {
                    if (be.TransaccionSpring == "S")
                    {
                        _dl.EliminarSpring(pbe);
                    }

                    //Terminar la transaccion
                    _transaccion.Commit();
                }
                catch (Exception e)
                {

                    //Cancela la transaccion
                    _transaccion.RollBack();
                    throw e;
                }
                finally
                {
                    _transaccion.Dispose();
                }
                return be;
            }          
     }

}